<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>对象作业</title>
    </head>
    <body>
        <script>
            //～加油～
            /*
            1. 创建一个对象有那两种方式
            答: 
              1) 字面量方式创建
              2) 内置构造函数方式创建
             */

            /*
            2. 请举例说明，对象的基本操作的两种语法
            */
            /*
              点语法: 对象名.键名=值
              */
            let person1 = {};
            person1.name = "lz";
            person1.age = 23;
            delete person1.age;
            person1.name = "lxy";
            console.log(person1.name);
            /*
              数组关联语法:  对象名[键名]=值
              */
            let person2 = {};
            person2[name] = "lz";
            person2[age] = 23;
            delete person1[age];
            person[age] = "lxy";
            console.log(person[name]);

            /*
            3.对象的curd，两种语法有什么区别
            答: 1.符的键名纯数只法, 不能使用点语法
                2. 数组关联语法可以对变量解析
            */

            /*
            4.对象怎么遍历？那个是键名，那个是键值
            语法: for(var 变量名 in 对象名) {}
            例: 
            let person = {
              name: "lz"
            }
            以上例子中, name时键名, "lz"是键值
            */

            /*
            5.简单和复杂数据类型在存储上的区别是什么？
            那赋值和比较上的区别又是什么？
            答: 
              简单数据类型存储于栈内存中
              复杂数据类型存储于堆内存中
              赋值区别:
                简单数据类型: 就是直接的值的复制, 两个变量之间不会有关联
                复杂数据类型: 赋值的是白能量存储的地址, 两个变量操作的是同一个存储空间, 一个变量修改l数据后, 另一个变量访问的也是修改之后的
            */

            /*
            6.如下代码会打印什么？请写出分析过程
            */
            //   var b = "boy";
            //   console.log(b);  b
            //   function fighting() {
            //     console.log(a);  undefined 函数调用后, var声明a变量提升, 但未赋值, 输出undefined
            //     console.log(c);  undefined 同上
            //     if (a === "apple") {
            //       a = "Alice";
            //     } else {
            //       a = "Ada";
            //     }
            //     console.log(a);  Ada 此时, 条件判断语句中a= undefined, 则a = Ada
            //     var a = "Andy"; 此时a被赋值为andy
            //     middle();
            //     function middle() {
            //       console.log(c++);  打印NaN 函数调用后, var声明c提升, 此时c=undefined, undefined参与自增运算, undefined不是Number, 返回NaN
            //       var c = 100;  此时c被赋值为100
            //       console.log(++c);  101
            //       small();
            //       function small() {
            //         console.log(a);  Andy 在上面执行过程中, a被重新声明并赋值为了"Andy"
            //       }
            //     }
            //     var c = (a = 88);
            //     function bottom() {
            //       b = "baby";
            //       console.log(b); // "baby" 此时b被赋值为baby
            //     }
            //     bottom();
            //   }
            //   fighting();
            //   console.log(b);  // baby 在上部bottom()函数已经被赋值为baby
        </script>
    </body>
</html>
